#!/user/bin/env python
# -*- coding: utf-8 -*-
'''
Author: Sjy
Description: 利用pyqtSignal实现自定义信号,此文件定义所有需要的信号

在 PyQt 中，与在 C++ 的 Qt 中一样，信号也是类定义的一部分，并且不能在运行时动态地向类中追加新的信号。
PyQt 的元对象系统同样在编译时（或者更准确地说，在 Python 脚本被解释执行时）确定了类的信号和槽。
'''

__all__ = [
    "signals",
]

from PyQt5 import QtCore, QtGui, QtWidgets

global SIGS 
SIGS = {}

class Signals(QtCore.QObject):
    """定义信号类"""
    # 打开模型相关信号 ======================================================================
    generic_plugin_signal = QtCore.pyqtSignal(*[object])
    # 打开模型
    sigOpenModel = QtCore.pyqtSignal(str)
    # # 打开vtk文件
    sigOpenVtk = QtCore.pyqtSignal(str)  
    # 打开vtk文件
    sigOpenVtu = QtCore.pyqtSignal(str)  
    # 打开stl文件
    sigOpenStl = QtCore.pyqtSignal(str)
    # 打开inp文件
    sigOpenInp = QtCore.pyqtSignal(str)
    # 运行 toolbar 命令
    sigStartRunToolbar = QtCore.pyqtSignal()

    # 切换 category 
    sigChangedRibbonbarCategory = QtCore.pyqtSignal(dict) # 会传入当前的category 等信息 在字典中

    

    def reg_plugin_signal(self, key,  func):
        """注册信号"""
        name = self.get_signal_name(key)
        global SIGS
        if name not in SIGS:
            SIGS[name] = []
        SIGS[name].append(func)
    def get_signal_name(self, key):
        return f"plugin.{key}"
    def emit(self, key, *args, **kwargs):
        """发射信号"""
        name = self.get_signal_name(key)
        if name in SIGS:
            for func in SIGS[name]:
                func(*args, **kwargs)

    def disconnect(self, key):
        name = self.get_signal_name(key)
        if name in SIGS:
            SIGS[name] = []

    #  ======================================================================                    
    

signals = Signals()
